로딩 중이에요... 🐣
[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
00 DRF개발 방식 및 강의목록 | ✅ 편저: 코담 운영자
1. DRF개발 방식
Django REST Framework(DRF)에서 가장 많이 쓰이고 공식적으로도 추천되는 방식은 다음과 같습니다
🔗 소스 1: bugbytes-io/drf-course-api
🔗 소스 2: braverokmc79/Django_REST_Framework_Series
✅ 1위: 제네릭 뷰(GenericAPIView + Mixin / 단축 클래스)
#GenericAPIView
path("generics/list/", TodoGenericsListAPI.as_view()),
path("generics/create/", TodoGenericsCreateAPI.as_view()),
path("generics/retrieve/<int:pk>/", TodoGenericsRetrieveAPI.as_view()),
path("generics/update/<int:pk>/", TodoGenericsUpdateAPI.as_view()),
path("generics/delete/<int:pk>/", TodoGenericsDeleteAPI.as_view()),
# GenericAPIView + Mixin
path("mixin_generics/", TodoGenericsListCreateAPI.as_view()),
path("mixin_generics/<int:pk>/", TodoGenericsRetrieveUpdateDeleteAPI.as_view()),
🔖 GenericAPIView 호출예
#
# http://127.0.0.1:8000/todo/generics/list/
# http://127.0.0.1:8000/todo/generics/create/
# http://127.0.0.1:8000/todo/generics/retrieve/1/
# http://127.0.0.1:8000/todo/generics/update/1/
# http://127.0.0.1:8000/todo/generics/delete/1
🔖 GenericAPIView + Mixin 호출예
# List + Create
#generics.ListCreateAPIView
# http://127.0.0.1:8000/todo/mixin_generics/ GET, CREATE
# Retrieve + Update + Delete (RUD)
# generics.RetrieveUpdateDestroyAPIView
# http://127.0.0.1:8000/todo/mixin_generics/1/ GET, PUT, DELETE 모두 처리
✅ [방식 1] 단축 클래스(Generic Class-based Views)
from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView
from .models import Todo
from .serializers import TodoSerializer
class TodoListCreateAPI(ListCreateAPIView):
queryset = Todo.objects.all()
serializer_class = TodoSerializer
class TodoDetailAPI(RetrieveUpdateDestroyAPIView):
queryset = Todo.objects.all()
serializer_class = TodoSerializer
✅ RetrieveUpdateDestroyAPIView는 다음 HTTP 메서드 3개를 처리합니다:
메서드 | 설명 | 예시 URL |
---|---|---|
GET | 상세 조회 | /todo/1/ |
PUT | 전체 수정 | /todo/1/ + JSON 바디 |
DELETE | 삭제 | /todo/1/ |
✅ 장점:
-
RetrieveAPIView + UpdateAPIView + DestroyAPIView
를 하나로 합친 클래스 -
중복 없이 하나의 API endpoint에서 상세조회, 수정, 삭제 처리 가능
✅ 구성 요약:
class TodoGenericsRetrieveUpdateDeleteAPI(generics.RetrieveUpdateDestroyAPIView):
queryset = Todo.objects.all() # 어디서 데이터를 가져올지
serializer_class = TodoSerializer # 데이터를 어떻게 직렬화할지
✅ [방식 2] GenericAPIView + Mixin 조합
from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
from .models import Todo
from .serializers import TodoSerializer
class TodoListCreateAPI(ListModelMixin, CreateModelMixin, GenericAPIView):
queryset = Todo.objects.all()
serializer_class = TodoSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class TodoDetailAPI(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, GenericAPIView):
queryset = Todo.objects.all()
serializer_class = TodoSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
✅ 장점:
-
조합의 유연성: 필요한 Mixin만 골라 쓸 수 있어 정밀 제어 가능
-
공식 문서 예제에서도 종종 등장하는 패턴
-
복잡한 조건 처리나 커스터마이징이 쉬움
🔖 제너릭 뷰(Generic View) 방식 비교 요약
항목 | 단축 클래스(Generic Views) | GenericAPIView + Mixin 조합 |
---|---|---|
코드 간결성 | 매우 높음 (GET/POST/PUT/DELETE 자동 지원) | 중간 (직접 메서드 구현 필요) |
사용 난이도 | 쉬움 | 약간 높음 (직접 Mixin 조합 필요) |
커스터마이징 | 낮음 (기본 동작 위주) | 높음 (로직 세분화 및 복잡한 처리 가능) |
유지보수 | 쉬움 (반복 코드 없음) | 구조 명확, 복잡한 프로젝트에 적합 |
공식 권장 여부 | ✅ 가장 먼저 소개되는 방식 | ✅ 다양한 상황에 대응 가능 |
✅ 정리: 대부분의 경우엔 단축 클래스(Generic View)로 충분하며, 특별한 커스터마이징이 필요할 때는 GenericAPIView + Mixin 조합을 고려하는 것이 좋습니다.
✅ 2위: ViewSet + Router 방식
🔹 예시:
from rest_framework.viewsets import ModelViewSet
from .models import Todo
from .serializers import TodoSerializer
class TodoViewSet(ModelViewSet):
queryset = Todo.objects.all()
serializer_class = TodoSerializer
URL은 router
를 통해 자동 생성됨
# urls.py
from rest_framework.routers import DefaultRouter
from .views import TodoViewSet
router = DefaultRouter()
router.register(r'todos', TodoViewSet)
urlpatterns = router.urls
🔖 장점:
항목 | 설명 |
---|---|
URL 자동 생성 | list, retrieve, create, update, destroy 등 자동 처리 |
Admin 스타일의 구성 | Django Admin처럼 직관적 |
대규모 프로젝트에 유리 | URL, View, Action 간 결합이 명확함 |
✅ 3위: APIView (직접 메서드 구현)
from rest_framework.views import APIView
class TodoAPIView(APIView):
def get(self, request):
...
def post(self, request):
...
⚠️ 단점:
-
반복 코드 많음
-
queryset
,serializer
자동 지원 없음 -
CRUD 모두 직접 처리해야 함
-
일반적으로 복잡하거나 비표준 API에만 사용
🎯 결론: DRF에서 가장 많이 쓰이고 추천되는 방식
순위 | 방식 | 추천 상황 |
---|---|---|
✅ 1위 | GenericAPIView + 단축 클래스 (ListCreateAPIView , RetrieveUpdateDestroyAPIView ) |
일반적인 CRUD API |
✅ 2위 | ModelViewSet + Router |
관리형 API 전체 자동화 원할 때 |
⚠️ 3위 | APIView |
복잡한 로직, 커스텀 처리 많을 때만 사용 |
2-강의 목록
Django REST Framework(DRF) 강의
아래는 Django REST Framework를 체계적으로 학습할 수 있는 BugBytes 의 YouTube 강의 시리즈입니다.